#include "ActualizarPersonaCommand.h"
#include "../../view/MenuColumnaActualizar.h"

ActualizarPersonaCommand::ActualizarPersonaCommand() {
	criterioBusqueda = 0;
	columnaActualizar = 0;
	valorBusqueda.clear();
	nuevoValor.clear();
	menuColumnas = new MenuColumnaActualizar(this);
}

ActualizarPersonaCommand::~ActualizarPersonaCommand() {
	delete menuColumnas;
}

void ActualizarPersonaCommand::Execute(){
	string input;
	if(!this->valorBusquedaSeteado()){
		cout << "Ingrese el valor de comparacion: ";
		getline(cin, input);
		this->setValorBusqueda(input);
	}
	if(!this->columnaSeleccionada()){
		MenuStack::getInstance()->push(menuColumnas);
		return;
	}
	if(!this->nuevoValorSeteado()){
		cout << "Ingrese el nuevo valor: ";
		getline(cin, input);
		this->setNuevoValor(input);
	}
	if(parametrosSeteados()){
		bool error = false;
		try{
		string respuesta = Cliente::getInstance()->actualizarPersona((criterio_busqueda) criterioBusqueda, (tipo_condicion) criterioComparacion, valorBusqueda,
													(criterio_busqueda) columnaActualizar, nuevoValor);
		cout << respuesta << endl;
		}catch(ErrorGestorException & e){
			cout << "Error al actualizar: " << e.what() << endl;
		}catch(ValorInvalidoException & e){
			cout << "Valor invalido: " << e.what() << endl;
			error = true;
		}
		cout << "presione <Enter> para continuar: ";
		getline(cin, input);
		valorBusqueda.clear();
		nuevoValor.clear();
		if(!error){
			MenuStack::getInstance()->pop();
			columnaActualizar = 0;
		}
	}
}

void ActualizarPersonaCommand::clear(){
	criterioBusqueda = 0;
	columnaActualizar = 0;
	valorBusqueda.clear();
	nuevoValor.clear();
}

void ActualizarPersonaCommand::setColumnaActualizar(int col){
	columnaActualizar = col;
}
void ActualizarPersonaCommand::setNuevoValor(string nuevoVal){
	nuevoValor = nuevoVal;
}

bool ActualizarPersonaCommand::columnaSeleccionada(){
	return columnaActualizar != 0;
}
bool ActualizarPersonaCommand::nuevoValorSeteado(){
	return !nuevoValor.empty();
}
bool ActualizarPersonaCommand::parametrosSeteados(){
	return criterioBusquedaSeteado() &&
			columnaSeleccionada() &&
			valorBusquedaSeteado() &&
			nuevoValorSeteado();
}

